import OSS from 'ali-oss'
import CryptoJS from 'crypto-js'

// OSS配置
let ossClient = null

/**
 * 初始化OSS客户端
 */
export function initOSSClient() {
  ossClient = new OSS({
    region: 'cn-beijing',
    accessKeyId: 'LTAI5t8PmMsEzZ3Y8KtR89LS',
    accessKeySecret: 'aZ5AS7l4BCe3yxbRnDZPpQAHw05MLU',
    bucket: 'k121',
    endpoint: 'oss-cn-beijing.aliyuncs.com',
    secure: true,
    timeout: 60000,
    cname: false
  })
}

/**
 * 生成文件路径
 * @param {File} file 文件对象
 * @returns {string} 文件路径
 */
function generateFilePath(file) {
  const date = new Date()
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  
  // 生成随机文件名
  const timestamp = Date.now()
  const random = Math.floor(Math.random() * 1000)
  const extension = file.name.split('.').pop()
  
  return `avatars/${year}${month}${day}/${timestamp}${random}.${extension}`
}

/**
 * 上传文件到OSS
 * @param {File} file 要上传的文件
 * @param {Object} options 上传配置项
 * @returns {Promise<string>} 返回文件的访问URL
 */
export async function uploadToOSS(file, options = {}) {
  if (!ossClient) {
    throw new Error('OSS client not initialized')
  }

  try {
    console.log('开始上传文件:', {
      fileName: file.name,
      fileSize: (file.size / 1024 / 1024).toFixed(2) + 'MB',
      fileType: file.type
    })
    
    // 生成文件路径
    const filePath = options.path || generateFilePath(file)
    console.log('OSS存储路径:', filePath)

    // 直接使用put方法上传
    const result = await ossClient.put(filePath, file, {
      headers: {
        'Content-Type': file.type,
        'Cache-Control': 'no-cache',
        'x-oss-object-acl': 'public-read'
      }
    })

    if (!result.url) {
      throw new Error('上传失败：未获取到文件URL')
    }

    console.log('上传成功，文件URL:', result.url)
    return result.url

  } catch (error) {
    console.error('上传失败:', error)
    throw error
  }
}

/**
 * 检查文件大小和类型
 * @param {File} file 文件对象
 * @param {Object} options 验证选项
 * @returns {boolean} 是否通过验证
 */
export function validateFile(file, options = {}) {
  const {
    maxSize = 5 * 1024 * 1024, // 默认最大5MB
    allowedTypes = ['image/jpeg', 'image/png', 'image/gif']
  } = options

  console.log('上传前校验文件:', {
    fileName: file.name,
    fileSize: (file.size / 1024 / 1024).toFixed(2) + 'MB',
    fileType: file.type
  })

  // 检查文件大小
  if (file.size > maxSize) {
    throw new Error(`文件大小不能超过${maxSize / 1024 / 1024}MB`)
  }

  // 检查文件类型
  if (!allowedTypes.includes(file.type)) {
    throw new Error(`只支持 ${allowedTypes.join('、')} 格式`)
  }

  console.log('文件校验通过')
  return true
} 